<?php

class BarController extends Controller {

  /**
   * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
   * using two-column layout. See 'protected/views/layouts/column2.php'.
   */
  public $layout = '//layouts/column2';
  /**
   * @var CActiveRecord the currently loaded data model instance.
   */
  private $_model;

  /**
   * @return array action filters
   */
  public function filters() {
    return array(
        'accessControl', // perform access control for CRUD operations
    );
  }

  /**
   * Specifies the access control rules.
   * This method is used by the 'accessControl' filter.
   * @return array access control rules
   */
  public function accessRules() {
    return array(
        /* array('allow',  // allow all users to perform 'index' and 'view' actions
          'actions'=>array('index','view'),
          'users'=>array('*'),
          ), */
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions' => array('view', 'create', 'update'),
            'users' => array('@'),
        ),
        array('allow', // allow admin user to perform 'admin' and 'delete' actions
            'actions' => array('index', 'admin', 'delete'),
            'users' => array('admin'),
        ),
        array('deny', // deny all users
            'users' => array('*'),
        ),
    );
  }

  /**
   * Displays a particular model.
   */
  public function actionView() {
    // Carga el modelo
    $model = $this->loadModel();

    // Carga un modelo para procesar las ofertas.
    $modelOferta = isset($_GET['idoferta']) ? Oferta::model()->findByAttributes(array(
                'id_bar' => $_GET['id'], 'id' => $_GET['idoferta'])) : new Oferta;

    // [*] Si se ha enviado el formulario, procesa los datos [*]
    if (isset($_POST['Oferta'])) {
      // Elimina atributos para evitar su actualizacion
      unset($_POST['Oferta']['foto']);

      $modelOferta->attributes = $_POST['Oferta'];
      $modelOferta->id_bar = $model->id;
      if ($modelOferta->save()) {
        $this->uploadFile($modelOferta, 'foto', 'foto_' . $modelOferta->id_oferta, 'jpg'); // TODO: extension
        $modelOferta->saveAttributes(array('foto'));
        $this->redirect(array('view', 'id' => $model->id));
      }
    }

    $this->render('_bar', array('model' => $model,
        'modelOferta' => $modelOferta));
  }

  /**
   * Creates a new model.
   * If creation is successful, the browser will be redirected to the 'view' page.
   */
  public function actionCreate() {
    $model = new bar;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if (isset($_POST['Bar'])) {
      $model->attributes = $_POST['Bar'];
      $this->uploadFile($model, "logotipo", "logo");
      if ($model->save()) {
        $this->redirect(array('view', 'id' => $model->id));
      }
    }

    $this->render('create', array(
        'model' => $model,
    ));
  }

  /**
   * Updates a particular model.
   * If update is successful, the browser will be redirected to the 'view' page.
   */
  public function actionUpdate() {
    $model = $this->loadModel();

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if (isset($_POST['Bar'])) {
      $model->attributes = $_POST['Bar'];
      $this->uploadFile($model, "logotipo", "logo");
      if ($model->save()) {
        $this->redirect(array('view', 'id' => $model->id));
      }
    }

    $this->render('update', array(
        'model' => $model,
    ));
  }

  /**
   * Deletes a particular model.
   * If deletion is successful, the browser will be redirected to the 'index' page.
   */
  public function actionDelete() {
    if (Yii::app()->request->isPostRequest) {
      // we only allow deletion via POST request
      $this->loadModel()->delete();

      // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
      if (!isset($_GET['ajax']))
        $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
    }
    else
      throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
  }

  /**
   * Lists all models.
   */
  public function actionIndex() {
    $dataProvider = new CActiveDataProvider('Bar');
    $this->render('index', array(
        'dataProvider' => $dataProvider,
    ));
  }

  /**
   * Manages all models.
   */
  public function actionAdmin() {
    $model = new bar('search');
    $model->unsetAttributes();  // clear any default values
    if (isset($_GET['Bar']))
      $model->attributes = $_GET['Bar'];

    $this->render('admin', array(
        'model' => $model,
    ));
  }

  /**
   * Returns the data model based on the primary key given in the GET variable.
   * If the data model is not found, an HTTP exception will be raised.
   */
  public function loadModel() {
    if ($this->_model === null) {
      if (isset($_GET['id']))
        $this->_model = bar::model()->findbyPk($_GET['id']);
      if ($this->_model === null)
        throw new CHttpException(404, 'The requested page does not exist.');
    }
    return $this->_model;
  }

  /**
   * Performs the AJAX validation.
   * @param CModel the model to be validated
   */
  protected function performAjaxValidation($model) {
    if (isset($_POST['ajax']) && $_POST['ajax'] === 'bar-form') {
      echo CActiveForm::validate($model);
      Yii::app()->end();
    }
  }

  /* Guarda el fichero subido */

  private function uploadFile(&$model, $field, $file_prefix) {
    $file = CUploadedFile::getInstance($model, $field);
    if ($file) {
      // Establece el nombre del fichero
      $model->$field = $file_name;
      $file->saveAs('images/' . $model->$field->name);
    }
  }

}
